Kotlin Koans 08 Smart casts

目次

Smart casts (Playground)

Description

Rewrite the following Java code using smart casts and when expression:

次のJavaコードを スマートキャストwhen式 を使用して書き換えてください。

public int eval(Expr expr) {
    if (expr instanceof Num) {
        return ((Num) expr).getValue();
    }
    if (expr instanceof Sum) {
        Sum sum = (Sum) expr;
        return eval(sum.getLeft()) + eval(sum.getRight());
    }
    throw new IllegalArgumentException("Unknown expression");
}

Code

fun eval(expr: Expr): Int =
        when (expr) {
            is Num -> expr.value
            is Sum -> eval(expr.left) + eval(expr.right)
            else -> throw IllegalArgumentException("Unknown expression")
        }

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Expr, val right: Expr) : Expr

Memo


変数がnullableなのであれば、明示的にnullチェックをする。

var str: String?
if (str != null) {
    // not-nullと推論できるので、スマートキャストされる
    str.value
}

is がJavaの instanceOf の役割を果たしていて、さらに以降の処理ではスマートキャストされた値を使用できる。

前回のKotlin Koans 07 Nullable typesと合わせて理解することで、よりKotlinぽい安全でシンプルなコードを書けるようになる。

← Posts